home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 2008-12-10 | 16.2 KB | 366 lines |
- '*****************************************
- '*** ***
- '*** JD-CALCULATOR V1.0 ***
- '*** (C) 1992 ***
- '*** BY JOERG DOMMERMUTH ***
- '*** ***
- '*****************************************
- '
- Screen Open 0,640,256,16,Hires
- Break Off
- Curs Off : Flash Off
- ' Load Iff "DH0:AMOS_Pro/Progs/JDCALC.PIC",0
- ' Spack 0 To 1
- Unpack 1 To 0
- Palette ,,,,,,,,,,,,,,,,,$AAA,$FFF,$233
- Colour Back Colour(0)
- Limit Mouse 128,43 To 434,290
- Pen 3 : Paper 0
- Reserve Zone 106
- Set Zone 1,15,8 To 51,18 : Rem off
- Set Zone 2,55,8 To 91,18 : Rem deg
- Set Zone 3,95,8 To 131,18 : Rem rad
- Set Zone 4,335,8 To 371,18 : Rem dec
- Set Zone 5,375,8 To 411,18 : Rem hex
- Set Zone 6,415,8 To 451,18 : Rem bin
- Set Zone 7,15,36 To 51,46 : Rem int
- Set Zone 8,15,48 To 51,58 : Rem fix1
- Set Zone 9,15,60 To 51,70 : Rem fix2
- Set Zone 10,15,72 To 51,82 : Rem fix3
- Set Zone 11,15,84 To 51,94 : Rem fix4
- Set Zone 12,15,96 To 51,106 : Rem fix5
- Set Zone 13,15,108 To 51,118 : Rem fix6
- Set Zone 14,15,120 To 51,130 : Rem fix7
- Set Zone 15,15,132 To 51,142 : Rem ffp
- Set Zone 16,15,144 To 51,154 : Rem deffp
- Set Zone 17,55,36 To 91,46 : Rem exp
- Set Zone 18,55,48 To 91,58 : Rem log
- Set Zone 19,55,60 To 91,70 : Rem ln
- Set Zone 20,55,72 To 91,82 : Rem logB
- Set Zone 21,95,36 To 131,46 : Rem sin
- Set Zone 22,95,48 To 131,58 : Rem asin
- Set Zone 23,95,60 To 131,70 : Rem hsin
- Set Zone 24,95,72 To 131,82 : Rem arsin
- Set Zone 25,135,36 To 171,46 : Rem cos
- Set Zone 26,135,48 To 171,58 : Rem acos
- Set Zone 27,135,60 To 171,70 : Rem hcos
- Set Zone 28,135,72 To 171,82 : Rem arcos
- Set Zone 29,175,36 To 211,46 : Rem tan
- Set Zone 30,175,48 To 211,58 : Rem atan
- Set Zone 31,175,60 To 211,70 : Rem htan
- Set Zone 32,175,72 To 211,82 : Rem artan
- Set Zone 33,215,36 To 251,46 : Rem cot
- Set Zone 34,215,48 To 251,58 : Rem acot
- Set Zone 35,215,60 To 251,70 : Rem hcot
- Set Zone 36,215,72 To 251,82 : Rem arcot
- Set Zone 37,255,36 To 291,46 : Rem sec
- Set Zone 38,255,48 To 291,58 : Rem asec
- Set Zone 39,255,60 To 291,70 : Rem hsec
- Set Zone 40,255,72 To 291,82 : Rem arsec
- Set Zone 41,295,36 To 331,46 : Rem cosec
- Set Zone 42,295,48 To 331,58 : Rem acosec
- Set Zone 43,295,60 To 331,70 : Rem hcosec
- Set Zone 44,295,72 To 331,82 : Rem arcosec
- Set Zone 45,335,36 To 371,46 : Rem wurzel
- Set Zone 46,335,48 To 371,58 : Rem xwurzel
- Set Zone 47,335,60 To 371,70 : Rem hoch
- Set Zone 48,375,36 To 411,46 : Rem prozent
- Set Zone 49,375,48 To 411,58 : Rem deltaprozent
- Set Zone 50,375,60 To 411,70 : Rem gwprozent
- Set Zone 51,415,36 To 451,46 : Rem abs
- Set Zone 52,415,48 To 451,58 : Rem vorzeichen
- Set Zone 53,415,60 To 451,70 : Rem rund
- Set Zone 54,415,72 To 451,82 : Rem 1X
- Set Zone 55,335,72 To 371,82 : Rem pi
- Set Zone 56,375,72 To 411,82 : Rem e
- Set Zone 57,55,84 To 91,94 : Rem m+
- Set Zone 58,95,84 To 131,94 : Rem m-
- Set Zone 59,135,84 To 171,94 : Rem m
- Set Zone 60,175,84 To 211,94 : Rem rm
- Set Zone 61,215,84 To 251,94 : Rem CM
- Set Zone 62,255,84 To 291,94 : Rem X-M
- Set Zone 63,295,84 To 331,94 : Rem X-Y
- Set Zone 64,335,84 To 371,94 : Rem Ma
- Set Zone 65,375,84 To 411,94 : Rem Mg
- Set Zone 66,415,84 To 451,94 : Rem Mh
- Set Zone 67,335,96 To 371,106 : Rem rol
- Set Zone 68,335,108 To 371,118 : Rem ror
- Set Zone 69,335,120 To 371,130 : Rem roxl
- Set Zone 70,335,132 To 371,142 : Rem roxr
- Set Zone 71,335,144 To 371,154 : Rem eqv
- Set Zone 72,375,96 To 411,106 : Rem asl
- Set Zone 73,375,108 To 411,118 : Rem asr
- Set Zone 74,375,120 To 411,130 : Rem lsl
- Set Zone 75,375,132 To 411,142 : Rem lsr
- Set Zone 76,375,144 To 411,154 : Rem imp
- Set Zone 77,415,96 To 451,106 : Rem mod
- Set Zone 78,415,108 To 451,118 : Rem and
- Set Zone 79,415,120 To 451,130 : Rem or
- Set Zone 80,415,132 To 451,142 : Rem xor
- Set Zone 81,415,144 To 451,154 : Rem not
- Set Zone 82,255,108 To 291,118 : Rem +
- Set Zone 83,255,120 To 291,130 : Rem -
- Set Zone 84,255,132 To 291,142 : Rem *
- Set Zone 85,255,144 To 291,154 : Rem /
- Set Zone 86,295,144 To 331,154 : Rem =
- Set Zone 87,55,108 To 91,118 : Rem Clear
- Set Zone 88,55,120 To 91,130 : Rem CE
- Set Zone 89,55,132 To 91,142 : Rem <-
- Set Zone 90,55,144 To 91,154 : Rem .
- Set Zone 91,95,144 To 131,154 : Rem 0
- Set Zone 92,135,144 To 171,154 : Rem 1
- Set Zone 93,175,144 To 211,154 : Rem 2
- Set Zone 94,215,144 To 251,154 : Rem 3
- Set Zone 95,95,132 To 131,142 : Rem 4
- Set Zone 96,135,132 To 171,142 : Rem 5
- Set Zone 97,175,132 To 211,142 : Rem 6
- Set Zone 98,215,132 To 251,142 : Rem 7
- Set Zone 99,95,120 To 131,130 : Rem 8
- Set Zone 100,135,120 To 171,130 : Rem 9
- Set Zone 101,175,120 To 211,130 : Rem A
- Set Zone 102,215,120 To 251,130 : Rem B
- Set Zone 103,95,108 To 131,118 : Rem C
- Set Zone 104,135,108 To 171,118 : Rem D
- Set Zone 105,175,108 To 211,118 : Rem E
- Set Zone 106,215,108 To 251,118 : Rem F
- DEGRAD=1 : Radian
- F=0 : Fix 0
- ZS=10
- FFP#=0.0
- MEMO#=0.0 : WERT$="" : ZAHL$="" : AUS$="" : Goto _CLEAR
- MAIN: Locate 13,3 : Print Repeat$(" ",35) : Locate 13,3
- If AUS$="-0" Then AUS$="0"
- If AUS$="" Then AUS$="0"
- If F>0 and Val(AUS$)=0 Then If WERT$="" Then AUS$="0." : For X=1 To F : AUS$=AUS$+"0" : Next
- If ZS=1 Then RAUS$="%"+AUS$
- If ZS=16 Then RAUS$="$"+AUS$
- If ZS=10 Then RAUS$=" "+AUS$
- Print Left$(RAUS$,1);" "; Extension_22_011A(AUS$,32,-1)
- MZ=0
- If MMZ<>0 Then MZ=MMZ : MMZ=0 : MARK=0 : Goto _GE2
- IN$="" : Clear Key : While Mouse Key<>0 : Wend
- _GET: IN$=Inkey$ : IN$=Upper$(IN$)
- MZ=Instr("+-*/=",IN$) : If MZ>0 Then Goto _GE2
- MZ=Instr(".0123456789ABCDEF",IN$) : If MZ>0 Then Goto AW
- MZ=Mouse Zone : MK=Mouse Key
- If MK<>1 or MZ=0 Then Goto _GET
- On MZ Goto _OFF,_DEG,_RAD,_DEC,_HEX,_BIN
- MZ=MZ-6
- On MZ Goto _FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FFP,_DEFFP
- MZ=MZ-10
- On MZ Goto _EXP,_LOG,_LN,_LOGB
- MZ=MZ-4
- On MZ Goto _SIN,_ASIN,_HSIN,_ARSIN
- MZ=MZ-4
- On MZ Goto _COS,_ACOS,_HCOS,_ARCOS
- MZ=MZ-4
- On MZ Goto _TAN,_ATAN,_HTAN,_ARTAN
- MZ=MZ-4
- On MZ Goto _COT,_ACOT,_HCOT,_ARCOT
- MZ=MZ-4
- On MZ Goto _SEC,_ASEC,_HSEC,_ARSEC
- MZ=MZ-4
- On MZ Goto _COSEC,_ACOSEC,_HCOSEC,_ARCOSEC
- MZ=MZ-4
- On MZ Goto _WURZEL,_XWURZEL,_HOCH,_PROZENT,_DELTAPROZENT,_GWPROZENT
- MZ=MZ-6
- On MZ Goto _ABS,_VORZEICHEN,_RUND,_1X,_PI,_E
- MZ=MZ-6
- On MZ Goto _MPLUS,_MMINUS,_M,_RM,_CM,_XM,_XY
- MZ=MZ-7
- On MZ Goto _MA,_MG,_MH
- MZ=MZ-3
- On MZ Goto _ROL,_ROR,_ROXL,_ROXR,_EQV
- MZ=MZ-5
- On MZ Goto _ASL,_ASR,_LSL,_LSR,_IMP
- MZ=MZ-5
- On MZ Goto _MOD,_AND,_OR,_XOR,_NOT
- MZ=MZ-5
- _GE2: On MZ Goto _PLUS,_MINUS,_MAL,_DURCH,_GLEICH
- MZ=MZ-5
- On MZ Goto _CLEAR,_CE,_DEL
- MZ=MZ-3
- On MZ Goto AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW
- _OFF: End
- _DEG: DEGRAD=0 : Degree : Goto _CLEAR
- _RAD: DEGRAD=1 : Radian : Goto _CLEAR
- _DEC: If ZS=10 Then Goto MAIN0
- ZAHL#=Val(RAUS$) : ZS=10 : Goto WERT_END
- _HEX: If ZS=16 Then Goto MAIN0
- ZAHL#=Int(Val(RAUS$)) : ZS=16 : F=0 : Fix 0 : Goto WERT_END
- _BIN: If ZS=1 Then Goto MAIN0
- ZAHL#=Int(Val(RAUS$)) : ZS=1 : F=0 : Fix 0 : Goto WERT_END
- _FIX: ZAHL#=Val(RAUS$) : F=MZ-1 : Fix F : Goto WERT_END
- _FFP: WERT#=Val(RAUS$) : W=Varptr(WERT#) : FFP=Leek(W) : BEF=F : F=0 : Fix 0 : ZAHL#=FFP : Goto WERT_END
- _DEFFP: Fix 7 : F=7 : ZAHL#=0.0 : RAUS=Val(RAUS$) : Loke Varptr(ZAHL#),RAUS : ZS=10 : Goto WERT_END
- _EXP: ZAHL#=Val(RAUS$) : ZAHL#=Exp(ZAHL#) : Goto WERT_END
- _LOG: If Sgn(Val(RAUS$))=-1 Then Goto _ERROR
- ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#) : Goto WERT_END
- _LN: If Sgn(Val(RAUS$))=-1 Then Goto _ERROR
- ZAHL#=Val(RAUS$) : ZAHL#=Ln(ZAHL#) : Goto WERT_END
- _LOGB: Gosub _GETWERT : If Sgn(ZAHL#)=0 and Sgn(WERT#)=0 Then If Log(WERT#)<>0.0 Then ZAHL#=Log(ZAHL#)/Log(WERT#) : Goto WERT_END
- Goto _ERROR
- _SIN: ZAHL#=Val(RAUS$) : ZAHL#=Sin(ZAHL#) : Goto WERT_END
- _ASIN: ZAHL#=Val(RAUS$)
- If DEGRAD=0 Then ZAHL#=90.0-Acos(ZAHL#) : Goto WERT_END
- ZAHL#=1.5708-Acos(ZAHL#) : Goto WERT_END
- _HSIN: ZAHL#=Val(RAUS$) : ZAHL#=Hsin(ZAHL#) : Goto WERT_END
- _ARSIN: ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#+Sqr(ZAHL#^2+1)) : Goto WERT_END
- _COS: ZAHL#=Val(RAUS$) : ZAHL#=Cos(ZAHL#) : Goto WERT_END
- _ACOS: ZAHL#=Val(RAUS$) : ZAHL#=Acos(ZAHL#) : Goto WERT_END
- _HCOS: ZAHL#=Val(RAUS$) : ZAHL#=Hcos(ZAHL#) : Goto WERT_END
- _ARCOS: ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#+Sqr(ZAHL#^2-1)) : Goto WERT_END
- _TAN: ZAHL#=Val(RAUS$) : ZAHL#=Tan(ZAHL#) : Goto WERT_END
- _ATAN: ZAHL#=Val(RAUS$) : ZAHL#=Atan(ZAHL#) : Goto WERT_END
- _HTAN: ZAHL#=Val(RAUS$) : ZAHL#=Htan(ZAHL#) : Goto WERT_END
- _ARTAN: ZAHL#=Val(RAUS$) : If ZAHL#=1.0 Then Goto _ERROR
- ZAHL#=Log((1+X)/(1-X))/2 : Goto WERT_END
- _COT: ZAHL#=Val(RAUS$) : If Tan(ZAHL#)<>0.0 Then ZAHL#=1/Tan(ZAHL#) : Goto WERT_END
- Goto _ERROR
- _ACOT: ZAHL#=Val(RAUS$) : ZAHL#=Pi#/2.0-Atan(ZAHL#) : Goto WERT_END
- _HCOT: ZAHL#=Val(RAUS$) : If Hsin(ZAHL#)<>0.0 Then ZAHL#=Hcos(ZAHL#)/Hsin(ZAHL#) : Goto WERT_END
- Goto _ERROR
- _ARCOT: ZAHL#=Val(RAUS$) : If ZAHL#=1.0 Then Goto _ERROR
- ZAHL#=Log((X+1)/(X-1))/2 : Goto WERT_END
- _SEC: ZAHL#=Val(RAUS$) : If Cos(ZAHL#)<>0.0 Then ZAHL#=1/Cos(ZAHL#) : Goto WERT_END
- Goto _ERROR
- _ASEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
- _HSEC: ZAHL#=Val(RAUS$) : If Exp(ZAHL#)+Exp(ZAHL#*-1)=0.0 Then Goto _ERROR
- ZAHL#=2/(Exp(ZAHL#)+Exp(ZAHL#*-1)) : Goto WERT_END
- _ARSEC: ZAHL#=Val(RAUS$) : If ZAHL#=0.0 Then Goto _ERROR
- ZAHL#=Log((Sqr(ZAHL#*-1^2+1)+1)/ZAHL#) : Goto WERT_END
- _COSEC: ZAHL#=Val(RAUS$) : If Sin(ZAHL#)<>0.0 Then ZAHL#=1/Sin(ZAHL#) : Goto WERT_END
- Goto _ERROR
- _ACOSEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(1/Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
- _HCOSEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(1/Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
- _ARCOSEC: ZAHL#=Val(RAUS$) : If ZAHL#=0.0 Then Goto _ERROR
- ZAHL#=Log((Sgn(ZAHL#)*Sqr(ZAHL#*-1^2+1)+1)/ZAHL#) : Goto WERT_END
- _WURZEL: ZAHL#=Val(RAUS$) : ZAHL#=Sqr(ZAHL#) : Goto WERT_END
- _XWURZEL: Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#^(1.0/WERT#) : Goto WERT_END
- Bell : Gosub _TOMAIN : Goto _XWURZEL
- _HOCH: Gosub _GETWERT : ZAHL#=Val(ZAHL$) : S=Sgn(ZAHL#) : WERT#=Val(RAUS$) : ZAHL#=ZAHL#^WERT#
- If S=-1 and Extension_22_032A(WERT#)=0 Then ZAHL#=ZAHL#*-1
- Goto WERT_END
- _PROZENT: Gosub _GETWERT : ZAHL#=ZAHL#*WERT#/100.0 : Goto WERT_END
- _DELTAPROZENT: If ZAHL#=0.0 Then Bell : Goto WERT_END
- Gosub _GETWERT : ZAHL#=WERT#*100.0/ZAHL# : Goto WERT_END
- _GWPROZENT: Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#*100.0/WERT# : Goto WERT_END
- Bell : Gosub _TOMAIN : Goto _GWPROZENT
- _ABS: ZAHL#=Val(ZAHL$) : ZAHL#=Abs(ZAHL#) : ZAHL$=Str$(ZAHL#)-" " : Goto WERT_END
- _VORZEICHEN: WERT#=Val(RAUS$)*-1 : Goto MAIN1
- _RUND: Gosub _GETWERT : WERT=WERT# : WERT=Abs(WERT) : If WERT>7 Then WERT=7
- Fix WERT : ZAHL$=Str$(ZAHL#) : ZAHL#=Val(ZAHL$) : Fix F : Goto WERT_END
- _1X: If Val(RAUS$)<>0.0 Then ZAHL#=1.0/Val(RAUS$) : Goto WERT_END
- Bell : Goto MAIN
- _PI: WERT#=Pi# : Goto MAIN1
- _E: WERT#= Extension_22_073E : Goto MAIN1
- _MPLUS: Locate 11,3 : Print "M" : MEMO#=MEMO#+Val(RAUS$) : Goto MAIN
- _MMINUS: Locate 11,3 : Print "M" : MEMO#=MEMO#-Val(RAUS$) : Goto MAIN
- _M: Locate 11,3 : Print "M" : MEMO#=Val(RAUS$) : Goto MAIN
- _RM: Locate 11,3 : Print "M" : WERT$=Str$(MEMO#)-" " : Goto MAIN0
- _CM: Locate 11,3 : Print " " : MEMO#=0.0 : Goto MAIN
- _XM: Locate 11,3 : Print "M" : RMEMO#=Val(RAUS$) : WERT$=Str$(MEMO#)-" " : MEMO#=RMEMO# : Goto MAIN0
- _XY: RZAHL#=ZAHL# : ZAHL#=Val(RAUS$) : WERT#=RZAHL# : Goto MAIN1
- _MA: Gosub _GETWERT : ZAHL#=(ZAHL#+WERT#)/2.0 : Goto WERT_END
- _MG: Gosub _GETWERT : ZAHL#=Sqr(ZAHL#*WERT#) : Goto WERT_END
- _MH: Gosub _GETWERT : If ZAHL#+WERT#<>0.0 Then ZAHL#=(2*ZAHL#*WERT#)/(ZAHL#+WERT#) : Goto WERT_END
- ZAHL#=0.0 : Goto WERT_END
- _ROL: WERT#=Val(RAUS$) : WERT#= Extension_22_03F0(1,WERT#) : Goto MAIN1
- _ROR: WERT#=Val(RAUS$) : WERT#= Extension_22_0400(1,WERT#) : Goto MAIN1
- _ROXL: WERT#=Val(RAUS$) : WERT#= Extension_22_0410(1,WERT#) : Goto MAIN1
- _ROXR: WERT#=Val(RAUS$) : WERT#= Extension_22_0420(1,WERT#) : Goto MAIN1
- _EQV: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
- ZAHL= Extension_22_075A(ZAHL,WERT) : ZAHL#=ZAHL : Goto WERT_END
- _ASL: WERT#=Val(RAUS$) : WERT#= Extension_22_0450(1,WERT#) : Goto MAIN1
- _ASR: WERT#=Val(RAUS$) : WERT#= Extension_22_0460(1,WERT#) : Goto MAIN1
- _LSL: WERT#=Val(RAUS$) : WERT#= Extension_22_0430(1,WERT#) : Goto MAIN1
- _LSR: WERT#=Val(RAUS$) : WERT#= Extension_22_0440(1,WERT#) : Goto MAIN1
- _IMP: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
- ZAHL= Extension_22_074A(ZAHL,WERT) : ZAHL#=ZAHL : Goto WERT_END
- _MOD: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
- ZAHL=ZAHL mod WERT : ZAHL#=ZAHL : Goto WERT_END
- _AND: Gosub _GETWERT : ZAHL=Int(ZAHL#) : WERT=Int(WERT#)
- ZAHL=ZAHL and WERT : ZAHL#=ZAHL : Goto WERT_END
- _OR: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
- ZAHL=ZAHL or WERT : ZAHL#=ZAHL : Goto WERT_END
- _XOR: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
- ZAHL=ZAHL xor WERT : ZAHL#=ZAHL : Goto WERT_END
- _NOT: WERT#=Val(RAUS$) : ZAHL=WERT# : ZAHL= Not ZAHL : ZAHL#=ZAHL : Goto WERT_END
- _PLUS: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#+WERT# : Goto WERT_END
- MMZ=MZ : Goto _GLEICH
- _MINUS: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#-WERT# : Goto WERT_END
- MMZ=MZ : Goto _GLEICH
- _MAL: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#*WERT# : Goto WERT_END
- MMZ=MZ : Goto _GLEICH
- _DURCH: If MARK=0 Then Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#/WERT# : Goto WERT_END
- If MARK=0 Then Bell : Gosub _TOMAIN : Goto _DURCH
- MMZ=MZ : Goto _GLEICH
- _GLEICH: WERT#=Val(RAUS$) : If MARK=1 Then Return
- Goto MAIN
- _CLEAR: WERT$="" : ZAHL$="" : AUS$="" : Goto MAIN
- _CE: WERT$="" : AUS$="" : Goto MAIN
- _DEL: If Len(WERT$)>0 Then WERT$=Left$(WERT$,Len(WERT$)-1)
- Goto MAIN0
- AW: If ZS=1 and Len(WERT$)>31 Then Goto MAIN0
- If ZS=1 Then Goto _ADD
- If ZS=16 and Len(WERT$)>7 Then Goto MAIN0
- If ZS=16 Then Goto _ADD
- If Len(WERT$)>31 Then Goto MAIN0
- PP=Instr(WERT$,".")
- If F>0 and PP=0 and Len(WERT$)>9 and MZ<>1 Then Goto MAIN0
- If PP=0 Then Goto _ADD
- NKS$=WERT$-Left$(WERT$,PP)
- If Len(NKS$)=F Then Goto MAIN0
- _ADD: On MZ Goto _ADDP,_ADD0,_ADD1,_ADD2,_ADD3,_ADD4,_ADD5,_ADD6,_ADD7,_ADD8,_ADD9,_ADDA,_ADDB,_ADDC,_ADDD,_ADDE,_ADDF
- _ADD0: If Val(RAUS$)<>0 or Val("%"+WERT$)<>0 or Instr(WERT$,".") Then WERT$=WERT$+"0"
- Goto MAIN0
- _ADD1: WERT$=WERT$+"1" : Goto MAIN0
- _ADD2: If ZS<>1 Then WERT$=WERT$+"2"
- Goto MAIN0
- _ADD3: If ZS<>1 Then WERT$=WERT$+"3"
- Goto MAIN0
- _ADD4: If ZS<>1 Then WERT$=WERT$+"4"
- Goto MAIN0
- _ADD5: If ZS<>1 Then WERT$=WERT$+"5"
- Goto MAIN0
- _ADD6: If ZS<>1 Then WERT$=WERT$+"6"
- Goto MAIN0
- _ADD7: If ZS<>1 Then WERT$=WERT$+"7"
- Goto MAIN0
- _ADD8: If ZS<>1 Then WERT$=WERT$+"8"
- Goto MAIN0
- _ADD9: If ZS<>1 Then WERT$=WERT$+"9"
- Goto MAIN0
- _ADDA: If ZS=16 Then WERT$=WERT$+"A"
- Goto MAIN0
- _ADDB: If ZS=16 Then WERT$=WERT$+"B"
- Goto MAIN0
- _ADDC: If ZS=16 Then WERT$=WERT$+"C"
- Goto MAIN0
- _ADDD: If ZS=16 Then WERT$=WERT$+"D"
- Goto MAIN0
- _ADDE: If ZS=16 Then WERT$=WERT$+"E"
- Goto MAIN0
- _ADDF: If ZS=16 Then WERT$=WERT$+"F"
- Goto MAIN0
- _ADDP: If ZS<>10 or F=0 Then Goto MAIN
- If Instr(WERT$,".") Then Goto MAIN0
- If ZS=10 and F<>0 Then WERT$=WERT$+"."
- If Left$(WERT$,1)="." Then WERT$="0"+WERT$
- Goto MAIN0
- _ERROR: Bell : ZAHL#=0.0 : Goto WERT_END
- MAIN1: If ZS=1 Then WERT$=Bin$(WERT#)-"%"
- If ZS=10 Then WERT$=Str$(WERT#)-" "
- If ZS=16 Then WERT$=Hex$(WERT#)-"$"
- MAIN0: AUS$=WERT$ : Goto MAIN
- WERT_END: MARK=0
- If ZS=1 Then ZAHL$=Bin$(ZAHL#)-"%"
- If ZS=10 Then ZAHL$=Str$(ZAHL#)-" "
- If ZS=16 Then ZAHL$=Hex$(ZAHL#)-"$"
- WERT$="" : AUS$=ZAHL$ : Goto MAIN
- _GETWERT: MARK=1 : ZAHL$=WERT$ : WERT$="" : ZAHL#=Val(RAUS$) : Goto MAIN
- _TOMAIN: WERT$=ZAHL$
- If ZS=1 Then RAUS$=Bin$(Val(ZAHL$))
- If ZS=10 Then RAUS$=Str$(Val(ZAHL$))
- If ZS=16 Then RAUS$=Hex$(Val(ZAHL$))
- Return